<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Keyword datatype | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="mapping-types.html" title="Field datatypes">
<link rel="prev" href="parent-join.html" title="Join datatype">
<link rel="next" href="nested.html" title="Nested datatype">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">Mapping</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">Field datatypes</a></span>
»
<span class="breadcrumb-node">Keyword datatype</span>
</div>
<div class="navheader">
<span class="prev">
<a href="parent-join.html">« Join datatype</a>
</span>
<span class="next">
<a href="nested.html">Nested datatype »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="keyword"></a>Keyword datatype<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/keyword.asciidoc">edit</a>
</h2>
</div></div></div>

<p>A field to index structured content such as IDs, email addresses, hostnames,
status codes, zip codes or tags.</p>
<p>They are typically used for filtering (<em>Find me all blog posts where
<code class="literal">status</code> is <code class="literal">published</code></em>), for sorting, and for aggregations. Keyword
fields are only searchable by their exact value.</p>
<p>If you need to index full text content such as email bodies or product
descriptions, it is likely that you should rather use a <a class="xref" href="text.html" title="Text datatype"><code class="literal">text</code></a> field.</p>
<p>Below is an example of a mapping for a keyword field:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "properties": {
      "tags": {
        "type":  "keyword"
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/670.console"></div>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<h3>Mapping numeric identifiers</h3>
<p>Not all numeric data should be mapped as a <a class="xref" href="number.html" title="Numeric datatypes">numeric</a> field datatype.
Elasticsearch optimizes numeric fields, such as <code class="literal">integer</code> or <code class="literal">long</code>, for
<a class="xref" href="query-dsl-range-query.html" title="Range query"><code class="literal">range</code></a> queries. However, <a class="xref" href="keyword.html" title="Keyword datatype"><code class="literal">keyword</code></a> fields
are better for <a class="xref" href="query-dsl-term-query.html" title="Term query"><code class="literal">term</code></a> and other
<a class="xref" href="term-level-queries.html" title="Term-level queries">term-level</a> queries.</p>
<p>Identifiers, such as an ISBN or a product ID, are rarely used in <code class="literal">range</code>
queries. However, they are often retrieved using term-level queries.</p>
<p>Consider mapping a numeric identifier as a <code class="literal">keyword</code> if:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
You don’t plan to search for the identifier data using
<a class="xref" href="query-dsl-range-query.html" title="Range query"><code class="literal">range</code></a> queries.
</li>
<li class="listitem">
Fast retrieval is important. <code class="literal">term</code> query searches on <code class="literal">keyword</code> fields are
often faster than <code class="literal">term</code> searches on numeric fields.
</li>
</ul>
</div>
<p>If you’re unsure which to use, you can use a <a class="xref" href="multi-fields.html" title="fields">multi-field</a> to map
the data as both a <code class="literal">keyword</code> <em>and</em> a numeric datatype.</p>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="keyword-params"></a>Parameters for keyword fields<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/keyword.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The following parameters are accepted by <code class="literal">keyword</code> fields:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-boost.html" title="boost"><code class="literal">boost</code></a>
</p>
</td>
<td valign="top">
<p>
Mapping field-level query time boosting. Accepts a floating point number, defaults
to <code class="literal">1.0</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="doc-values.html" title="doc_values"><code class="literal">doc_values</code></a>
</p>
</td>
<td valign="top">
<p>
Should the field be stored on disk in a column-stride fashion, so that it
can later be used for sorting, aggregations, or scripting? Accepts <code class="literal">true</code>
(default) or <code class="literal">false</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="eager-global-ordinals.html" title="eager_global_ordinals"><code class="literal">eager_global_ordinals</code></a>
</p>
</td>
<td valign="top">
<p>
Should global ordinals be loaded eagerly on refresh? Accepts <code class="literal">true</code> or <code class="literal">false</code>
(default). Enabling this is a good idea on fields that are frequently used for
terms aggregations.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="multi-fields.html" title="fields"><code class="literal">fields</code></a>
</p>
</td>
<td valign="top">
<p>
Multi-fields allow the same string value to be indexed in multiple ways for
different purposes, such as one field for search and a multi-field for
sorting and aggregations.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="ignore-above.html" title="ignore_above"><code class="literal">ignore_above</code></a>
</p>
</td>
<td valign="top">
<p>
Do not index any string longer than this value.  Defaults to <code class="literal">2147483647</code>
so that all values would be accepted. Please however note that default
dynamic mapping rules create a sub <code class="literal">keyword</code> field that overrides this
default by setting <code class="literal">ignore_above: 256</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-index.html" title="index"><code class="literal">index</code></a>
</p>
</td>
<td valign="top">
<p>
Should the field be searchable? Accepts <code class="literal">true</code> (default) or <code class="literal">false</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="index-options.html" title="index_options"><code class="literal">index_options</code></a>
</p>
</td>
<td valign="top">
<p>
What information should be stored in the index, for scoring purposes.
Defaults to <code class="literal">docs</code> but can also be set to <code class="literal">freqs</code> to take term frequency into account
when computing scores.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="norms.html" title="norms"><code class="literal">norms</code></a>
</p>
</td>
<td valign="top">
<p>
Whether field-length should be taken into account when scoring queries.
Accepts <code class="literal">true</code> or <code class="literal">false</code> (default).
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="null-value.html" title="null_value"><code class="literal">null_value</code></a>
</p>
</td>
<td valign="top">
<p>
Accepts a string value which is substituted for any explicit <code class="literal">null</code>
values.  Defaults to <code class="literal">null</code>, which means the field is treated as missing.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-store.html" title="store"><code class="literal">store</code></a>
</p>
</td>
<td valign="top">
<p>
Whether the field value should be stored and retrievable separately from
the <a class="xref" href="mapping-source-field.html" title="_source field"><code class="literal">_source</code></a> field. Accepts <code class="literal">true</code> or <code class="literal">false</code>
(default).
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="similarity.html" title="similarity"><code class="literal">similarity</code></a>
</p>
</td>
<td valign="top">
<p>
Which scoring algorithm or <em>similarity</em> should be used. Defaults
to <code class="literal">BM25</code>.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="normalizer.html" title="normalizer"><code class="literal">normalizer</code></a>
</p>
</td>
<td valign="top">
<p>
How to pre-process the keyword prior to indexing. Defaults to <code class="literal">null</code>,
meaning the keyword is kept as-is.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">split_queries_on_whitespace</code>
</p>
</td>
<td valign="top">
<p>
Whether <a class="xref" href="full-text-queries.html" title="Full text queries">full text queries</a> should split the input on whitespace
when building a query for this field.
Accepts <code class="literal">true</code> or <code class="literal">false</code> (default).
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<a class="xref" href="mapping-field-meta.html" title="meta"><code class="literal">meta</code></a>
</p>
</td>
<td valign="top">
<p>
Metadata about the field.
</p>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>Indexes imported from 2.x do not support <code class="literal">keyword</code>. Instead they will
attempt to downgrade <code class="literal">keyword</code> into <code class="literal">string</code>. This allows you to merge modern
mappings with legacy mappings. Long lived indexes will have to be recreated
before upgrading to 6.x but mapping downgrade gives you the opportunity to do
the recreation on your own schedule.</p>
</div>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="parent-join.html">« Join datatype</a>
</span>
<span class="next">
<a href="nested.html">Nested datatype »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
